/**
 *	@file	fld_pmtel.h
 *	@brief	フィールド　電話監視
 *	@author	Miyuki Iwasawa
 *	@date	08.01.28
 */

#ifndef __H_FLD_PMTEL_H__
#define __H_FLD_PMTEL_H__

#include "tel/pmtel_book.h"
#include "savedata/pgear_sv_util.h"

///電話用ワーク構造体外部参照定義
typedef struct _FLD_PMTEL_WORK	FLD_PMTEL_WORK;

typedef struct _PMTEL_CALL_PARAM{
	u8	group;
	u8	group_num;
	u8	reserve_id;
	u8	tel_type;
	u8	tel_id;
}PMTEL_CALL_PARAM;

///////////////////////////////////////////////////////////////////////
//常駐関数
//fld_pmtel_st.c
///////////////////////////////////////////////////////////////////////
/**
 *	@brief	フィールド　ポケギア電話ワーク確保
 *
 *	必ず FldPMTel_FreeWork()で解放すること
 */
extern FLD_PMTEL_WORK* FldPMTel_AllocWork(int heapID,FIELDSYS_WORK* fsys);

/**
 *	@brief	フィールド　ポケギア電話ワーク解放
 */
extern void FldPMTel_FreeWork(FLD_PMTEL_WORK* wk);

/**
 *	@brief	フィールド　ポケギア電話ワークへのポインタを取得
 */
extern FLD_PMTEL_WORK* FldPMTel_PointerGet(FIELDSYS_WORK* fsys);

/**
 *	@brief	フィールド　ポケギア電話　着信フラグセット
 */
extern void FldPMTel_CallupFlagSet(FLD_PMTEL_WORK* wk);

/**
 *	@brief	フィールド　ポケギア電話　着信フラグリセット
 */
extern void FldPMTel_CallupFlagReset(FLD_PMTEL_WORK* wk);

/**
 *	@brief	フィールド　ポケギア電話　着信フラグゲット
 */
extern BOOL FldPMTel_CallupFlagGet(FLD_PMTEL_WORK* wk);

/**
 *	@brief	ポケギア　電話帳ワークへのポインタを取得
 */
extern PMTEL_BOOK* FldPMTel_GetBookWorkAdrs(FLD_PMTEL_WORK* wk);

/**
 *	@brief	電話　着信予約設定
 */
extern void FldPMTel_IncomingReservation(FLD_PMTEL_WORK* wk,u8 reserve_id,BOOL force_f);

/**
 *	@brief	電話　着信抽選カウンター更新
 *
 *	@param	diff_time	分単位の差分
 */
extern void FldPMTel_UpdateTimeCounter(FLD_PMTEL_WORK* wk,int diff_m,int diff_s);

/**
 *	@brief	電話　着信状態タイムアウトチェック
 */
extern void FldPMTel_CheckTimeoutCall(FLD_PMTEL_WORK* wk,s64 now_sec);

/*
 * @brief	電話　着信リセット
*/
extern void FldPMTel_ResetCallParam(FLD_PMTEL_WORK* wk);

/**
 *	@brief	電話　着信無視
 */
extern void FldPMTel_EgnoreCall(FLD_PMTEL_WORK* wk);

/**
 *	@brief	電話着信　サイレントモードへ移行
 */
extern void FldPMTel_SetCallSilentMode(FLD_PMTEL_WORK* wk);

/**
 *	@brief	SE再生タスク
 */
extern void FldPMTel_PhoneSeSet(FLD_PMTEL_WORK* wk,BOOL set_f);

/**
 *	@brief	マサキのボックスいっぱいイベントチェック
 */
extern BOOL FldPMTel_EvCheckMasakiBoxFull(FIELDSYS_WORK* fsys);

/**
 *	@brief	オーキドの図鑑評価着信イベントチェック
 */
extern BOOL FldPMTel_EvCheckOokidoZukanCheck(FIELDSYS_WORK* fsys);

/*
 *	@brief	ウツギのトゲピー孵化イベントチェック
 */
extern BOOL FldPMTel_EvCheckUtsugiTogepiiHatching(FIELDSYS_WORK* fsys,POKEMON_PARAM* pp);

/**
 *	@brief	育て爺さん　タマゴ発生時の着信イベントチェック
 */
extern BOOL FldPMTel_EvCheckSodateyaEggSet(FIELDSYS_WORK* fsys);

/**
 *	@brief	使い込み発生チェック
 */
extern int FldPMTel_MatherEmbezzlementCheck(PMTEL_SAVE* tel_sv,u32 n_deposit,u32 o_deposit);

///////////////////////////////////////////////////////////////////////
//非常駐関数
//fld_pmtel.c
///////////////////////////////////////////////////////////////////////

/**
 *	@brief	フィールド　ポケギア電話　着信者名文字列取得
 *
 *	@param	heapID	利用するヒープ
 *	@return	STRBUF*
 *
 *	着信中の相手の名前文字列をSTRBUFに確保して返します
 *	利用後にSTRBUF_Delete()で解放してください
 */
extern STRBUF* FldPMTel_CallNameStrAlloc(FLD_PMTEL_WORK* wk,int heapID);

/**
 *	@brief	フィールド　ポケギア電話　着信パラメータセット
 */
extern void FldPMTel_CallParamSet(FLD_PMTEL_WORK* wk,const u8 number,const u8 group,const u8 group_num,const u8 ev_type,const u8 ev_id);

/**
 *	@brief	ポケギア　着信パラメータ取得
 */
extern u8 FldPMTel_CallParamGet(FLD_PMTEL_WORK* wk,PMTEL_CALL_PARAM* pc);

/**
 *	@brief	電話　着信抽選
 */
extern BOOL FldPMTel_CheckCallup(FLD_PMTEL_WORK* wk);



///////////////////////////////////////////////////////////////////////////////////
////field_revengeオーバーレイをロードした状態でないと使えません
/**
 *	@brief	再戦トレーナーチェック
 *
 *	内部で呼び出すBS_TrainerIDCheck()がオーバレイfield_revengeに配置されてるので呼び出し注意
 *
 */
extern u16 FldPMTel_RevengeTrainerSearch(u8 tel_number,SAVEDATA* sv,PMTEL_BOOK_MAN* book,u8 time_zone);

///////////////////////////////////////////////////////////////////////////////////
////デバッグ用
#ifdef PM_DEBUG
/**
 *	@brief	電話着信抽選の間隔を指定
 */
extern void DNumInput_TelIntervalSet(FIELDSYS_WORK* fsys,u32 param,u32 value);

/*
 *	@brief	電話着信抽選の間隔を取得
 */
extern u32 DNumInput_TelIntervalGet(FIELDSYS_WORK* fsys,u32 param);

extern void DNumInput_TelStockFlagSet(FIELDSYS_WORK* fsys,u32 param,u32 value);
extern u32 DNumInput_TelStockFlagGet(FIELDSYS_WORK* fsys,u32 param);


#endif	//PM_DEBUG
#endif	//__H_FLD_PMTEL_H__